#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9+7;
const int N = 1e5+5, D = 20;
ll p2[N];
void solve() {
int n, q; cin >> n >> q;
vector<int> a(n);
for (auto &ai: a) {
cin >> ai;
}
vector<array<int, 2>> cu[n];
for (int i = 0; i < q; ++i) {
int l, x; cin >> l >> x; l--;
cu[l].push_back({x, i});
}
vector<int> basis(D);
int rank = 0;
vector<int> ans(q);
for (int i = 0; i < n; ++i) {
int mask = a[i];
for (int j = D - 1; j >= 0; --j) {
if (!(mask & (1 << j))) continue;
if (!basis[j]) {
basis[j] = mask;
rank++;
break;
}
mask ^= basis[j];
}
for (auto [x, idx]: cu[i]) {
for (int j = D - 1; j >= 0; --j) {
if (!(x & (1 << j))) continue;
x ^= basis[j];
}
if (x == 0) {
ans[idx] = p2[i - rank + 1];
}
}
}
for (auto x: ans) {
cout << x << "\n";
}
}
int main(){
ios::sync_with_stdio(0), cin.tie(0);
p2[0] = 1;
for (int i = 1; i < N; ++i) {
p2[i] = p2[i - 1] + p2[i - 1];
if (p2[i] >= mod) p2[i] -= mod;
}
int tc = 1;
for (int t = 1; t <= tc; ++t) {
solve();
}
}
6. Zigzag Conversion | 1612B - Special Permutation |
1481. Least Number of Unique Integers after K Removals | 1035. Uncrossed Lines |
328. Odd Even Linked List | 1219. Path with Maximum Gold |
1268. Search Suggestions System | 841. Keys and Rooms |
152. Maximum Product Subarray | 337. House Robber III |
869. Reordered Power of 2 | 1593C - Save More Mice |
1217. Minimum Cost to Move Chips to The Same Position | 347. Top K Frequent Elements |
1503. Last Moment Before All Ants Fall Out of a Plank | 430. Flatten a Multilevel Doubly Linked List |
1290. Convert Binary Number in a Linked List to Integer | 1525. Number of Good Ways to Split a String |
72. Edit Distance | 563. Binary Tree Tilt |
1306. Jump Game III | 236. Lowest Common Ancestor of a Binary Tree |
790. Domino and Tromino Tiling | 878. Nth Magical Number |
2099. Find Subsequence of Length K With the Largest Sum | 1608A - Find Array |
416. Partition Equal Subset Sum | 1446. Consecutive Characters |
1618A - Polycarp and Sums of Subsequences | 1618B - Missing Bigram |